// 纯函数:相同的输入得到相同的输出  映射
// 纯函数：slice  非纯函数：splice

// 纯函数的好处  可以通过memorize减少 复杂代码二次执行的事件

// lodash 函数式编程 属于纯函数。 方法必须传参数
let getNumber = (a) => {
    console.log(new Date().getTime());
    let e = 0;
    for (var i = 0; i < 1000000; i++) {
        e += i;
        e * i;
    }
    return a;
};

let memorize = (fn) => {
    let obj = {};
    return function () {
        let key = JSON.stringify(arguments);
        obj[key] = obj[key] || fn.apply(fn, arguments);
        return obj[key];
    };
};

const _memo = memorize(getNumber);

console.log(_memo(1));
console.log(_memo(1));
console.log(_memo(1));
console.log(_memo(1));

// 纯函数的副作用
// 当一个变量在外面，纯函数中用到外部变量，外部变量的改变会导致纯函数不是纯函数

// 例 num的改变会影响纯函数
let num = 18;

function is(n) {
    return n >= num;
}
